\section{主要模拟与可视化方法}

\subsection{疫情走势可视化方法}
\subsubsection{plotly绘图}
\paragraph{}
Plotly是一个非常著名且强大的开源数据可视化框架，它通过构建
基于浏览器显示的web形式的可交互图表来展示信息，可创建多种精美的图表和地图;
尤其是擅长绘制动态气泡图，故采用此工具进行气泡动态图和其他一些简单图表的绘制。
此外，Plotly库的使用有在线和离线两种，在线使用提供更多的绘图功能，但
需注册帐号、设置密码，离线使用功能较少，但无需设置帐号，
就像使用其他python库一样调用就好。本次可视化采用离线调用Plotly的方法进行绘图。
下面简单地介绍一些Plotly绘图的代码\footnote{详细步骤可参考附件中的
	Epidemic-analysis.ipynb文件}。
\paragraph{}
1.利用Plotly制作折线图
\begin{center}\scriptsize
	\begin{lstlisting}{python}
fig_oversea = px.line(df_oversea, x='dates', y='confirmed',
	line_group='country',
	color='country',
	color_discrete_sequence=px.colors.qualitative.D3,
	hover_name='country',
   )
fig_oversea.show()
\end{lstlisting}
\end{center}
\paragraph{}
2.利用Plotly制作动态气泡图
\begin{center}\scriptsize
	\begin{lstlisting}{python}
fig_oversea_recent = px.scatter(df_oversea_recent, x='dead', y='confirmed',
	size='confirmed', text='country', color='country',
	color_discrete_sequence=px.colors.qualitative.Light24,
	animation_frame='dates',animation_group='country',
	hover_name='country',
	range_x=[-10,100000],
	range_y=[0,1600000],
	size_max=50,
	template='plotly_white',
	)
fig_oversea_recent.show()
	\end{lstlisting}
\end{center}
\subsubsection{matplotlib绘图}
\paragraph{}
Plotly库十分适合绘制折线图和动态气泡图，但在绘制柱状图，尤其是绘制
堆叠柱状图的时候，matplotlib库是一个更好的选择。下面是利用matplotlib库
绘制堆叠柱状图的代码。
\paragraph{}
3.利用matplotlib绘制堆叠柱状图
\begin{center}\scriptsize
	\begin{lstlisting}{matplotlib}
plt.title("Convid-19 Confirmed Case")
plt.xlabel("Number")
plt.ylabel("date")
		
plt.barh(df_sum1.dates, df_sum['act'], color='blue', label='active ')		
cum =list(map(sum, zip(list(df_sum1['act']))))		
plt.barh(df_sum1.dates, df_sum['dead'], left=cum, color='r', label='deaths')		
cum2 =list(map(sum, zip(list(df_sum1['act']),list(df_sum1['dead']))))
plt.barh(df_sum1.dates, df_sum1['cured'], left=cum2, color='gray', label='cured')
plt.tick_params(labelsize=13)
		
plt.style.use('seaborn-paper')
plt.rcParams['figure.figsize'] = (10.0, 15.0)
plt.legend(loc='best')	
plt.show()
	\end{lstlisting}
\end{center}

\subsection{疫情分布现状可视化方法}
\subsubsection{各洲疫情国数目分布制图}
\paragraph{}
由于各洲疫情国数目这一项，数据简单，且数据量小，故采用直接在Excel中制图的方法
来进行可视化。选用饼图进行可视化，并在饼图的分扇上标记各洲具体的疫情国数目，
既能直观地显示出各洲疫情国数目占全球疫情国数目的比例，又能显示出各洲疫情国
具体的数目。
\subsubsection{全球确诊病例分布情况制图（含中国）}
\paragraph{}
利用Echarts提供的模板，使用前面数据处理获取的5月17日的JSON格式全球疫情数据，
将确诊病例可视化为可交互的矩形树状图（可在文件“treemap-simple - 1.html”
和“treemap-simple - 2.html”中进行交互），用以表达全球确诊病例在各大洲及各国家
的分布情况。

\subsection{疫情发展阶段分析方法}
\paragraph{}
一直以来，我们都很难准确地评估疫情的发展阶段，然而，如果不能判断疫情发展
所处的阶段也就无法针对性地采取应对措施，不能及时复工，会对经济造成
无法估计的损失。同时，无法准确判断疫情发展阶段对国民的心理状况来说也是一个
巨大的挑战。
\paragraph{}
为准确评估疫情发展阶段，本文尝试提出了“累计病例日平均数”这一指标。这一指标值
为截至当日的累计病例数与该地区出现疫情日到当日的日期数比值。之所以使用这个指标，
是因为累计病例曲线的拐点\footnote{拐点，又称反曲点，在数学上指
	改变曲线向上或向下方向的点，直观地说拐点是使切线穿越曲线的点
	（即连续曲线的凹弧与凸弧的分界点）。若该曲线图形的函数在拐点有二阶导数，
	则二阶导数在拐点处异号（由正变负或由负变正）或不存在。}难以判断，从而较难判断
疫情发展阶段，而“累计病例日平均数”曲线的形状可能能\textbf{更直观地从整体上
	判断出某地区疫情所处的发展阶段、所处的周期、及未来可能的发展趋势},
这条曲线的顶点滞后于累计病例曲线的拐点，也滞后于新增病例数的峰值，
但是这条曲线的态势比累计病例曲线更直观看出疫情的态势：
\begin{enumerate}[1.]
	\item \textbf{如果这条曲线是上扬的},说明该地的疫情仍在继续恶化中，
	      处于此轮疫情扩散的前期；
	\item \textbf{如果这条曲线明显缓和出现顶点},说明该地的
	      疫情已经受控，处于此轮疫情扩散的中期；
	\item \textbf{如果这条曲线越过顶点之后掉头向下},说明
	      该地的疫情已经得到良好的控制，处于此轮疫情扩散的后期。
\end{enumerate}
\paragraph{}
由于在不知道曲线全貌的情况下拐点难以判断，且拐点的计算需要求二阶倒数，
计算较为复杂。“累计病例日平均数”这一指标，计算简单，且在无需知道曲线全貌
情况下便可判断疫情的发展阶段，较为实用。
本文对各国家及地区疫情所处的前、中、后期阶段判断的主要依据便是该曲线，
并结合其他指标比如治愈率病亡率等形成。
\paragraph{}
此外，这一部分数据量大，且多为双坐标轴图表，囿于本人使用matplotlib、plotly
等工具编程制图的能力有限，故以DataFrame工具完成数据整理，
并采用Excel制图的方法来完成可视化。

\subsection{疫情模拟方法}
\paragraph{}
这一部分使用Python编程，模拟分析疫情在不同防控方案下的发展状况，藉此分
析隔离措施是否有利于疫情防控，分析不同方案的有效性。为新发生疫情的国家
合地区制定防疫方案提供参考。
\paragraph{}
根据疫情的统计数据等信息将疫情模拟的相关参数设置如下：
\begin{enumerate}[1.]
	\item 我们假定疫情为单点传播，即初始感染人数为期1，后续感染者
	      的感染链条均可溯源至此感染者。
	\item 疫情的平均潜伏期设置为14天。
	\item 疫情传染率设置为60\%，即感染者每接触10名健康的人，约产生6名新的感染者。
	      此值会随着人们防疫意识的加强而降低。
	\item 感染者在潜伏期间的见面人数的初始值设置为15人（假定均为未感染者），并假设
	      此值会随着防疫方案变化。此值一般会逐渐降低，但若政府鼓励复工、集会
	      等行为，可能会导致此值上升。
	\item 假定感染者在15天后能够得到治愈或确定死亡，且假定还可能会因为感染人数
	      过多，无法及时得到治疗而提前死亡。
	\item 居民隔离率初始值为0.01，且会随防疫方案的调整而变化。
	\item 假设疫情结束的标志为总感染人数人数归零。
	\item 政府防疫方案见表5。
\end{enumerate}
\paragraph{}
本次模拟假设了三种可能的防疫方案，如表5所示。假设在疫情刚开始发生时，
政府并没有相应的防疫措施，从第五天起
制定防疫方案，且防疫方案会随时间变化而改动，最终在第30日，防疫方案最终
定型。
\begin{center}
	\begin{longtable}{lcccccc}
		\caption{政府防疫方案}
		\label{tab:yuan}                                          \\
		\toprule
		方案 & 项目   & 第5日 & 第10日 & 第15日 & 第20日 & 第30日 \\
		\midrule
		甲   & 会面率 & 1     & 0.8    & 0.5    & 0.2    & 0.1    \\
		     & 封锁率 & 0.03  & 0.4    & 0.6    & 0.8    & 0.9    \\
		\midrule
		乙   & 会面率 & 4     & 2      & 1      & 0.6    & 0.3    \\
		     & 封锁率 & 0.03  & 0.1    & 0.4    & 0.8    & 0.9    \\
		\midrule
		丙   & 会面率 & 5     & 4      & 3      & 3      & 4      \\
		     & 封锁率 & 0.03  & 0.4    & 0.5    & 0.6    & 0.7    \\
		\bottomrule
	\end{longtable}
\end{center}
\paragraph{}
政府防疫方案多以文字描述为主，在这里将其量化为方案造成的两个结果指标，
分别是会面率和分所率。其中，会面率是指感染者会面人数的数量，初始值15*
会面率是实际会面人数;封锁率是指政府对于感染者的控制情况，如0.7指政府
切断了70\%的感染者继续感染健康人群的途径。
\paragraph{}
依据以上方案，使用Python编程\footnote{代码见附件}模拟疫情发展情况，并使用matplotlib对
模拟结果进行可视化。
